#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#include<stdlib.h>
#include<sys/wait.h>

#define MAXLINE 64
#define LINE 16
#define ARGLEN 10


// `ls > log`
int main(){

    char line[MAXLINE];

    char* argv[ARGLEN];
    char* token;
    char* space = " ";
    int index = 0;

    for(;;){
        printf("tinyshell:");

        index = 0;
        fgets(line, MAXLINE, stdin);
        if(line == NULL) continue;

        //分割输入字符串line到argv;
        token = strtok(line, space);
        while(token != NULL){
            argv[index] = (char*)malloc(sizeof(char) * strlen(token));
            strncpy(argv[index], token, strlen(token));
            token = strtok(NULL, space);
            index++;
        }
        argv[index - 1][strlen(argv[index - 1]) - 1] = '\0';
        for(int i=index;i<ARGLEN;i++){
            argv[i] = NULL;
        } // end;


        // 参数个数：index;
        printf("index:%d\n",index);
        
        if(index == 1 && !strcmp(argv[0], "q") || !strcmp(argv[0], "quit")) break;

        
        // check redirect;
        char* argv[ARGLEN];
        for(int i=0; i< index; i++){
            if(strcmp(argv[i], ">") == 0){
                
            }
        }
        
        // // 检查是否有管道
        // int pipe_start = 0;
        // int pipe_end  = 0;
        // int fd[2]; ///管道;
        // if (pipe(fd) < 0) {
        //     perror("pipe");
        // }
        // char* arg[ARGLEN];
        // for(int i=0; i<index; i++){
        //     if(strcmp(argv[i], "|") == 0) {
        //         pipe_end = i;
        //         for(int i=pipe_start; i<pipe_end; i++){
        //             arg[i - pipe_start] = (char*)malloc(sizeof(char) * strlen(argv[i]));
        //             strncpy(arg[i - pipe_start], argv[i], strlen(argv[i]));
        //         }
        //         for(int i= pipe_end - pipe_start; i<ARGLEN; i++) arg[i] = NULL;

        //         if(fork() == 0){
        //             close()
        //             execvp(arg[0], arg);
        //         } else {
        //             close(fd[0]);
        //             write(fd[1], "sdf", 3);
        //             wait(NULL);
        //         }
        //     }

        // } // pipe end;

        if(fork() == 0){
            execvp(argv[0], argv);
        } else{
            wait(NULL);
        }
    }
}


